home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 September / PCWorld_2006-09_cd.bin / v cisle / flyakite / FlyakiteOSX v3.5.exe / $DESKTOP / FlyakiteOSX v3.5 Source / System Files Updater.nsi < prev    next >
Text File  |  2006-02-22  |  12KB  |  341 lines

  1. #==========================================
  2. # COMPRESSION SETTINGS
  3. #==========================================
  4.     CRCCheck force
  5.     SetCompressor /SOLID /FINAL lzma
  6.  
  7.  
  8.  
  9. #==========================================
  10. # DEFINES
  11. #==========================================
  12.     !include "Defines.nsi"
  13.     !define NAME "System Files Updater"
  14.     !define MUI_ICON "Assets\Images\Icons\System Files Updater.ico"
  15.     !define MUI_WELCOMEFINISHPAGE_BITMAP "Assets\Images\Wizards\Update.bmp"
  16.  
  17.  
  18.  
  19. #==========================================
  20. # INCLUDES
  21. #==========================================
  22.     !include "MUI.nsh"
  23.     !include "Sections.nsh"
  24.     !include "Get Parameters.nsi"
  25.     !addplugindir "Assets\Plugins"
  26.  
  27.  
  28.  
  29. #==========================================
  30. # INSTALLER INFORMATION
  31. #==========================================
  32.     Name "${NAME}"
  33.     OutFile "Assets\Tools\${NAME}.exe"
  34.  
  35.  
  36.  
  37. #==========================================
  38. # INTERFACE SETTINGS
  39. #==========================================
  40.     Caption "${NAME}"
  41.     BrandingText "${COPYRIGHT} ${PRODUCT_PUBLISHER}"
  42.     ShowInstDetails show
  43.     InstallColors /windows
  44.     InstallButtonText "Update"
  45.  
  46.     Var AppDir
  47.     Var FileSize
  48.     Var Office
  49.     Var UpdatedFileCount
  50.  
  51.  
  52.  
  53. #==========================================
  54. # PAGES
  55. #==========================================
  56.       !define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through updating the system files on your computer.\r\n\r\n\
  57.                                     This will only update files on your system that have reverted back to the default XP look.  It will NOT reapply visual styles, cursors, sounds or anything else non-system file related.\r\n\r\n\
  58.                                     Click Update to start."
  59.       !define MUI_WELCOMEPAGE_TITLE "Welcome to the ${NAME} Wizard"
  60.     !insertmacro MUI_PAGE_WELCOME
  61.       !define MUI_INSTFILESPAGE_FINISHHEADER_TEXT "Update Complete"
  62.       !define MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT "The update was completed successfully"
  63.     !insertmacro MUI_PAGE_INSTFILES
  64.       !define MUI_FINISHPAGE_NOAUTOCLOSE
  65.  
  66.  
  67.  
  68. #==========================================
  69. # LANGUAGES
  70. #==========================================
  71.     !insertmacro MUI_LANGUAGE "English"
  72.  
  73.  
  74.  
  75. #==========================================
  76. # INSTALLER MACROS
  77. #==========================================
  78.     !macro UpdateFile UNUSED FileName TargetFolder
  79.       !define UNIQUE_LINE ${__LINE__}
  80.  
  81.       #CHECK IF FILE EXISTS
  82.       IfFileExists "${TargetFolder}\${FileName}" 0 END_${UNIQUE_LINE}
  83.       IfFileExists "${INST_RESOURCES}\${FileName}" 0 END_${UNIQUE_LINE}
  84.  
  85.       #READ REGISTRY FILE SIZE
  86.       ReadRegStr $0 HKLM "Software\${PRODUCT_NAME}\FILES" "${FileName}"
  87.       StrCmp $0 "" END_${UNIQUE_LINE}
  88.  
  89.       #READ ACTUAL FILE SIZE
  90.       Push "${TargetFolder}\${FileName}"
  91.       Call GetFileSize
  92.       Pop $FileSize
  93.  
  94.       #CHECK IF FILE SIZES DIFFER
  95.       StrCmp "$0" "$FileSize" END_${UNIQUE_LINE}
  96.  
  97.       #DISPLAY CURRENTLY UPDATING FILE
  98.       !insertmacro SetDetailsPrint "Updating File: ${FileName}"
  99.  
  100.       #BACKUP FILE
  101.       ReadRegStr $0 HKLM "Software\${PRODUCT_NAME}\FILES" "${FileName}"
  102.       Delete "${INST_BACKUP}\${FileName}"
  103.       CopyFiles /SILENT "${TargetFolder}\${FileName}" "${INST_BACKUP}"
  104.  
  105.       #MODIFY FILE
  106.       CopyFiles /SILENT "${TargetFolder}\${FileName}" "${INST_TEMPFILES}"
  107.       StrCpy "$OUTDIR" "${INST}"
  108.       ExecWait '"${INST_TOOLS}\ResHacker.exe" -script "${INST_RESOURCES}\${FileName}\${FileName}.txt"'
  109.       IfFileExists "${INST_NEWFILES}\${FileName}" +3
  110.       DeleteRegValue HKLM "Software\${PRODUCT_NAME}\FILES" "${FileName}"
  111.       Goto END_${UNIQUE_LINE}
  112.  
  113.       #WRITE NEW FILE SIZE TO REGISTRY
  114.       Push "${INST_NEWFILES}\${FileName}"
  115.       Call GetFileSize
  116.       Pop $FileSize
  117.       WriteRegStr HKLM "Software\${PRODUCT_NAME}\FILES" "${FileName}" "$FileSize"
  118.  
  119.       #REPLACE FILE IN CACHE
  120.       IfFileExists "$SYSDIR\dllcache\${FileName}" 0 +2
  121.       CopyFiles /SILENT "${INST_NEWFILES}\${FileName}" "$SYSDIR\dllcache\${FileName}"
  122.       IfFileExists "$WINDIR\ServicePackFiles\i386\${FileName}" 0 +2
  123.       CopyFiles /SILENT "${INST_NEWFILES}\${FileName}" "$WINDIR\ServicePackFiles\i386\${FileName}"
  124.  
  125.       #REPLACE FILE IN TARGET FOLDER
  126.       Delete "${TargetFolder}\${FileName}.${PRODUCT_NAME}"
  127.       Rename "${INST_NEWFILES}\${FileName}" "${TargetFolder}\${FileName}.${PRODUCT_NAME}"
  128.       ExecCmd::exec '"${INST_TOOLS}\MoveEx.exe" "${TargetFolder}\${FileName}.${PRODUCT_NAME}" "${TargetFolder}\${FileName}"'
  129.  
  130.       #COUNT UPDATED FILES
  131.       IntOp $UpdatedFileCount $UpdatedFileCount + 1
  132.  
  133.       SetRebootFlag true
  134.  
  135.       END_${UNIQUE_LINE}:
  136.       !undef UNIQUE_LINE
  137.     !macroend
  138.  
  139.  
  140.     !macro ComCtl32 UNUSED FileName TargetFolder Number
  141.       !define UNIQUE_LINE ${__LINE__}
  142.  
  143.       #CHECK IF FILE EXISTS
  144.       IfFileExists "${TargetFolder}\${FileName}" 0 END_${UNIQUE_LINE}
  145.       IfFileExists "${INST_RESOURCES}\${FileName}" 0 END_${UNIQUE_LINE}
  146.  
  147.       #READ REGISTRY FILE SIZE
  148.       ReadRegStr $0 HKLM "Software\${PRODUCT_NAME}\FILES" "${FileName}${Number}"
  149.       StrCmp $0 "" END_${UNIQUE_LINE}
  150.  
  151.       #READ ACTUAL FILE SIZE
  152.       Push "${TargetFolder}\${FileName}"
  153.       Call GetFileSize
  154.       Pop $FileSize
  155.  
  156.       #CHECK IF FILE SIZES DIFFER
  157.       StrCmp "$0" "$FileSize" END_${UNIQUE_LINE}
  158.  
  159.       #DISPLAY CURRENTLY INSTALLING FILE
  160.       !insertmacro SetDetailsPrint "Updating File: ${FileName}"
  161.  
  162.       #BACKUP FILE
  163.       Delete "${INST_BACKUP}\${FileName}${Number}"
  164.       CopyFiles /SILENT "${TargetFolder}\${FileName}" "${INST_BACKUP}"
  165.       Rename "${INST_BACKUP}\${FileName}" "${INST_BACKUP}\${FileName}${Number}"
  166.  
  167.       #MODIFY FILE
  168.       SetRebootFlag true
  169.       CopyFiles /SILENT "${TargetFolder}\${FileName}" "${INST_TEMPFILES}"
  170.       StrCpy "$OUTDIR" "${INST}"
  171.       ExecWait '"${INST_TOOLS}\ResHacker.exe" -script "${INST_RESOURCES}\${FileName}\${FileName}.txt"'
  172.       IfFileExists "${INST_NEWFILES}\${FileName}" +3
  173.       DeleteRegValue HKLM "Software\${PRODUCT_NAME}\FILES" "${FileName}${Number}"
  174.       Goto END_${UNIQUE_LINE}
  175.       Rename "${INST_NEWFILES}\${FileName}" "${INST_NEWFILES}\${FileName}${Number}"
  176.  
  177.       #WRITE FILE SIZE TO REGISTRY
  178.       Push "${INST_NEWFILES}\${FileName}${Number}"
  179.       Call GetFileSize
  180.       Pop $FileSize
  181.       WriteRegStr HKLM "Software\${PRODUCT_NAME}\FILES" "${FileName}${Number}" "$FileSize"
  182.  
  183.       #REPLACE FILE IN TARGET FOLDER
  184.       Delete "${TargetFolder}\${FileName}.${PRODUCT_NAME}"
  185.       Delete "${TargetFolder}\${FileName}.delete"
  186.       Rename "${TargetFolder}\${FileName}" "${TargetFolder}\${FileName}.delete"
  187.       Rename "${INST_NEWFILES}\${FileName}${Number}" "${TargetFolder}\${FileName}"
  188.  
  189.       #COUNT UPDATED FILES
  190.       IntOp $UpdatedFileCount $UpdatedFileCount + 1
  191.  
  192.       END_${UNIQUE_LINE}:
  193.       !undef UNIQUE_LINE
  194.     !macroend
  195.  
  196.  
  197.     !macro OfficeFiles MacroName FileName SubKey Entry
  198.       #GET FILE PATH
  199.       ReadRegStr $Office HKLM "${SubKey}" "${Entry}"
  200.       Push $Office
  201.       Call GetParent
  202.       Pop $Office
  203.  
  204.       !insertmacro ${MacroName} "System Files\Office" "${FileName}" "$Office"
  205.       IfFileExists "$Office\${FileName}.${PRODUCT_NAME}" 0 +9
  206.       Delete "$Office\${FileName}.delete"
  207.       Rename "$Office\${FileName}" "$Office\${FileName}.delete"
  208.       Rename "$Office\${FileName}.${PRODUCT_NAME}" "$Office\${FileName}"
  209.       Delete "$Office\${FileName}.delete"
  210.  
  211.       Push "$Office\${FileName}"
  212.       Call GetFileSize
  213.       Pop $FileSize
  214.       WriteRegStr HKLM "Software\${PRODUCT_NAME}\FILES" "${FileName}" "$FileSize"
  215.     !macroend
  216.  
  217.  
  218.     !macro SetDetailsPrint TextToPrint
  219.       SetDetailsPrint both
  220.       DetailPrint "${TextToPrint}"
  221.       SetDetailsPrint none
  222.     !macroend
  223.  
  224.  
  225.  
  226.  
  227. #==========================================
  228. # SECTION - PRE UPDATE (HIDDEN)
  229. #==========================================
  230.     Section "Pre Update"
  231.       !insertmacro SetDetailsPrint "Checking System Files..."
  232.       !insertmacro SetDetailsPrint ""
  233.  
  234.       #CREATE DIRECTORIES
  235.       IfFileExists "${INST}" 0 +3
  236.       CreateDirectory "${INST_NEWFILES}"
  237.       CreateDirectory "${INST_TEMPFILES}"
  238.  
  239.       ExecCmd::exec "${INST_TOOLS}\wfpdisable.exe"
  240.     SectionEnd
  241.  
  242.  
  243.  
  244. #==========================================
  245. # SECTION - SYSTEM FILES
  246. #==========================================
  247.     !include "System Files.nsi"
  248.     !insertmacro SystemFiles "" "" "UpdateFile"
  249.  
  250.  
  251.  
  252. #==========================================
  253. # SECTION - MISC FILES
  254. #==========================================
  255.     Section "Logon Screen"
  256.         !insertmacro UpdateFile "Extras\Logon Screen" "logonui.exe" "$SYSDIR"
  257.     SectionEnd
  258.  
  259.     Section "Boot Screen"
  260.         !insertmacro UpdateFile "Extras\Boot Screen\Normal" "ntkrnlmp.exe" "$SYSDIR"
  261.         !insertmacro UpdateFile "Extras\Boot Screen\Normal" "ntkrnlpa.exe" "$SYSDIR"
  262.         !insertmacro UpdateFile "Extras\Boot Screen\Normal" "ntoskrnl.exe" "$SYSDIR"
  263.  
  264.         IfFileExists "$SYSDIR\ntkrnlpa.exe.${PRODUCT_NAME}" 0 +2
  265.           ExecCmd::exec  "${INST_TOOLS}\XVI32.exe $SYSDIR\ntkrnlpa.exe.${PRODUCT_NAME} /S=${INST_TOOLS}\ReplacePalette.xsc"
  266.  
  267.         IfFileExists "$SYSDIR\ntoskrnl.exe.${PRODUCT_NAME}" 0 +2
  268.           ExecCmd::exec  "${INST_TOOLS}\XVI32.exe $SYSDIR\ntoskrnl.exe.${PRODUCT_NAME} /S=${INST_TOOLS}\ReplacePalette.xsc"
  269.  
  270.         IfFileExists "$SYSDIR\ntkrnlmp.exe.${PRODUCT_NAME}" 0 +2
  271.           ExecCmd::exec  "${INST_TOOLS}\XVI32.exe $SYSDIR\ntkrnlmp.exe.${PRODUCT_NAME} /S=${INST_TOOLS}\ReplacePalette.xsc"
  272.     SectionEnd
  273.  
  274.  
  275. #==========================================
  276. # SECTION - POST UPDATE (HIDDEN)
  277. #==========================================
  278.     Section "Post Update"
  279.       StrCmp "$UpdatedFileCount" "0" 0 MORETHANZERO
  280.       !insertmacro SetDetailsPrint "Your system is already up to date.  No files need updating at this time."
  281.       Goto CLEANUP
  282.  
  283.       MORETHANZERO:
  284.       IfSilent 0 NOTSILENT
  285.       ReadRegDWORD $0 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" "EnableBalloonTips"
  286.       StrCmp $0 "0" 0 +3
  287.       MessageBox MB_OK "The FlyakiteOSX System Files Updater has updated $UpdatedFileCount files on your system.  The updated files will be applied on the next reboot."
  288.       Goto CLEANUP
  289.       NotifyIcon::Icon /NOUNLOAD "fy" "${INST}\Tray.ico"
  290.       NotifyIcon::Icon /NOUNLOAD "n" "System files have been updated" "The FlyakiteOSX System Files Updater has updated $UpdatedFileCount files on your system.  The updated files will be applied on the next reboot."
  291.       Sleep 10000
  292.       SetAutoClose true
  293.       NotifyIcon::Icon "r"
  294.  
  295.       NOTSILENT:
  296.       !insertmacro SetDetailsPrint ""
  297.       !insertmacro SetDetailsPrint "$UpdatedFileCount files have been updated and will be applied on the next reboot."
  298.  
  299.       Call DeleteIconCache
  300.       WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Control\Session Manager" "AllowProtectedRenames" 0x00000001
  301.  
  302.       CLEANUP:
  303.       Delete "${INST_TOOLS}\ResHacker.ini"
  304.       RMdir "${INST_BACKUP}"
  305.       RMdir "${INST_LOGS}"
  306.       RMdir "${INST_NEWFILES}"
  307.       RMdir "${INST_RESOURCES}"
  308.       RMdir /r "${INST_TEMPFILES}"
  309.  
  310.       SetOutPath $TEMP
  311.       System::Free 0
  312.     SectionEnd
  313.  
  314.  
  315.  
  316.  
  317. #==========================================
  318. # INSTALLER FUNCTIONS
  319. #==========================================
  320.     !include "Functions.nsi"
  321.  
  322.     Function .onInit
  323.       InitPluginsDir
  324.  
  325.       Call OneInstance
  326.       System::Call "kernel32::GetModuleHandle(t 'shell32.dll') i .s"
  327.       System::Call "kernel32::GetProcAddress(i s, i 680) i .r0"
  328.       System::Call "::$0() i .r0"
  329.       StrCmp "$0" "1" +3
  330.       MessageBox MB_OK "The ${NAME} tool cannot be run on a limited user account. $\nThe ${NAME} will now quit." /SD IDOK
  331.       Quit
  332.  
  333.       StrCpy $UpdatedFileCount "0"
  334.       SetShellVarContext all
  335.     FunctionEnd
  336.  
  337.  
  338.     Function .onGuiEnd
  339.       SetOutPath $TEMP
  340.       System::Free 0
  341.     FunctionEnd